
use crate::Error;
use axum::extract::FromRequestParts;
use axum_valid::HasValidate;

/// 通过[axum::extract::Path]提取器实现自己的提取器
/// 
/// 可以返回自定义的数据结构和状态码
#[derive(FromRequestParts)]
#[from_request(via(axum::extract::Path), rejection(Error))]
pub struct Path<T>(pub T);


/// 数据校验[Valid]必须实现[HasValidate]trait
impl <T>HasValidate for Path<T> {
    type Validate = T;

    fn get_validate(&self) -> &Self::Validate {
        &self.0
    }
}



/// 简化[Valid<Path<T>>]的提取器
#[derive(Debug)]
pub struct ValidPath<T>(pub T);


